A symbol reader is a device used to extract the information that is optically encoded in a symbol. Often the information is converted into computer-compatible digital data. The decoded data can be transmitted directly to an attached computer, can be stored locally for later use, or can used by an application program that is resident in the symbol reader. The symbol reader can be considered as two separate elements: an input device and a decoder. These two elements can reside in separate physical packages connected by a cable or other communications link, or they can reside in a single unit.
The input device is a unit that employs electro-optical techniques to acquire data from the symbol. The input device is often an active system, wherein it illuminates the symbol with light energy, and examines the amount of light reflected by a localized area of the symbol. Many input devices employ a light beam, such as a laser beam, which is scanned over the symbol. The actual scanning motion is provided by the operator's hand motion, by an internal scanning system, or by movement of the symbol past the input device. In other devices, the symbol is illuminated and light reflected from the symbol is picked up by a receiver, such as a charged-coupled detector (CCD) which electrically produces a scanning motion. The light areas of the symbol will reflect more light than the dark areas. The light reflected from the symbol is directed to an optical receiver, such as a photodiode detector or charge-coupled detector (CCD), which generates a small current that is proportional to the amount of light returned. An amplifier in the input device increases the signal from the optical receiver to a usable level. The instantaneous electrical output from the input device is representative of the localized reflectivity of the symbol at the point that is being scanned. In order to differentiate between the light and dark areas, the analog voltage is typically converted and processed into a digital waveform by a circuit known as a wave shaper.
There are currently a large variety of machine readable symbologies in use. Currently, the predominant type are bar code symbologies. The bar code symbologies optically encode data through the use of an array of differing width parallel bars and spaces. Bar code symbologies fall into two general categories: discrete and continuous. In a discrete code, each character can stand alone and can be decoded independently from the adjacent characters. Each character is separated from its neighbor by loosely toleranced intercharacter gaps, which contain known information. Every character has a bar on each end. The continuous code symbologies have no intercharacter gaps, every character beginning with a bar and ending with a space. The end of one character is indicated by the start of the next character. Examples of bar code symbologies include the Universal Product Code (UPC), European Article Numbering system (EAN), Interleaved Two-of-Five, Codabar, Code 39, Code 128, Code 93, Code 49, and Code 16K. A variety of two-dimensional symbologies or matrix codes also exist. Matrix codes encode information in the area of the symbol. Popular area codes include: Codablock, USD-5, Vericode, Datacode, UPS code, PDF417, Datamatrix and Code One.
In a bar code symbol, data is conveyed in the widths of the bars and spaces. Two basic type of bar codes exist: those that employ only two element widths (wide and narrow), and those that use multiple widths. In a two-width symbology, the ratio between wide and narrow element widths is called N. The element widths are measured in terms of modules. A "module" is the narrowest nominal width unit of measure is a bar code symbology (a one-wide bar or space). "Nominal" refers to the intended value of a specific parameter, regardless of printing errors, etc. N is typically allowed to vary over some range (usually from 2.0 to 3.0), but must be constant for a given symbol. As N gets larger, the allowable printing tolerance also increases. If a bar code is printed within published specifications ("in spec"), data security is not compromised for smaller values of N.
In a multiple width symbology, bars and spaces can assume several different width values. Most multiple width values are modular, meaning that the length of a character is subdivided into a predetermined number of modules, and a bar or space width is always an integral number of modules. Multiple width symbologies are usually continuous and often decoded using edge to similar edge algorithms. This technique involves the measurement of distances between similar edges of adjacent elements rather than the measurement of actual element widths. Hence, these multiple width symbologies will not be negatively affected by uniform growth or shrinkage.
For a bar code system to be successful, it should allow data to be collected rapidly, economically, and accurately. The performance of a bar code system is highly dependent upon the quality of the printed symbols. Most bar code applications must therefore be able to handle symbols that deviate from published printing standards in some respect or another. One of the most significant contributions to errors is deviation of element widths from their nominal values. Poor quality symbols will result in lower first read rates. The first read rate is a probability that the reader will read and correctly decode information on its first pass. Another significant factor is substitution error rate. The substitution error rate is the likelihood of an error being made in the decode. The substitution error rate is strongly influenced by the first read rate. For example, it would be possible to use an aggressive algorithm to extract information from any arrangement of light and dark areas. Such an algorithm would result in a very high first read rate, but would have a very poor substitution error rate. Conversely, the algorithm could be designed to insist that the perceived element widths be very close to the nominal values. This algorithm would have a very low first read rate but would also have a very low substitution error rate. Reading equipment manufacturers must strike a compromise that will ensure a good first read rate when scanning in spec symbols, while minimizing substitution error rate across a wide range of print quality.
Currently, symbol readers distinguish between two symbol elements by selecting a median value between the nominal widths of the two elements. The measured actual value of the symbol element is compared to the median value. For example, if a symbol is comprised of a narrow element and a wide element, the narrow element having a nominal width of 10 modules, and the wide element having a nominal width of 20 modules (N=2.0), then the median value selected may be 15 modules. Any symbol element which had a measured actual value of 15 modules or less would be classified as a narrow element by the reader. Any element which had a measured actual value of greater than 15 counts would be classified as a wide element. This approach introduces problems where due to errors, such as a printing error, a narrow element is actually printed at a width greater than 15 modules, or a wide element is printed having a width of less than 15 modules. A symbol reader encountering this type of deviation from the nominal standard would be unable to interpret the symbol or would incorrectly interpret the symbol.